package web.clazz;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**作为反射类对象的容器
 
 * <pre>
 * 成员如下：
 * Class clazz 存储类对象
 * String name 存储类的别名、表名
 * Map&lt;String,Method&gt; method 存储&lt;方法别名,方法对象&gt;
 * Map&lt;String,Boolean&gt; mReturnType 存储&lt;方法别名,是否返回页面&gt;
 * Map&lt;String,List&lt;String&gt;&gt; params 存储&lt;方法别名,参数集&gt;
 * Map&lt;String,Method&gt; members 存储&lt;变量名,变量的get方法&gt;
 * Map&lt;Field,String&gt; fields 存储实体类&lt;成员变量,表的列名&gt;
 * Map&lt;String,String&gt; key 存储实体类主键
 * boolean keyauto 实体主键是否自增
 * </pre>
 * @version 1.0
 * @author 乐渊
 * */
@SuppressWarnings("rawtypes")
public class Clazz {

	private Class clazz;//类对象
	private String name;//类的别名，表名
	
	private Map<String,Method> method = new HashMap<>();//方法别名、方法对象
	
	private Map<String,Boolean> mReturnType = new HashMap<>();//方法别名，是否返回页面

	private Map<String,List<String>> params = new HashMap<>();//方法别名、方法参数集
	
	private Map<String,Method> members = new HashMap<String,Method>();//类成员变量、对应get方法
	
	private Map<Field,String> fields = new HashMap<Field,String>();//实体成员变量、表的列名
	
	private Map<String,String> key = new HashMap<String,String>();//主键
	
	private boolean keyAuto;//主键是否自增
	
	/**用于存储类对象
	 * @return clazz
	 * */
	public Class getClazz() {
		return clazz;
	}
	/**用于存储类对象
	 * @param clazz 反射类对象
	 * */
	public void setClazz(Class clazz) {
		this.clazz = clazz;
	}
	
	/**用于存储Controller类的别名或者Entity类的表名
	 * @return name
	 * */
	public String getName() {
		return name;
	}
	/**用于存储类的别名或者实体类的表名
	 * @param name Entity、Controller别名
	 * */
	public void setName(String name) {
		this.name = name;
	}
	
	/**用于存储Controller类里的<b>方法</b>注解的信息
	 * @return method &lt;方法别名,方法对象&gt;
	 * */
	public Map<String, Method> getMethod() {
		return method;
	}
	
	/**用于存储Controller类里的<b>方法</b>注解的信息
	 * @param method &lt;String:方法别名,Object:方法对象或返回类型&gt;
	 * */
	public void setMethod(Map<String, Method> method) {
		this.method = method;
	}
	
	/**用于Controller类里的方法参数的注解
	 * @return params &lt;方法别名,参数集&gt; 
	 * */
	public Map<String, List<String>> getParams() {
		return params;
	}
	
	/**用于Controller类里的方法参数的注解
	 * @param params &lt;方法别名,参数集&gt;
	 * */
	public void setParams(Map<String, List<String>> params) {
		this.params = params;
	}
	
	/**用于取Controller类成员变量值
	 * @return members &lt;变量名,变量的get方法&gt;
	 * */
	public Map<String, Method> getMembers() {
		return members;
	}
	
	/**用于存Controller类成员变量值
	 * @param members &lt;变量名,变量的get方法&gt;
	 * */
	public void setMembers(Map<String, Method> members) {
		this.members = members;
	}
	
	/** 用于POJO类
	 * @return fields POJO成员键值对&lt;成员变量,表的列名&gt; 
	 * */
	public Map<Field, String> getFields() {
		return fields;
	}
	
	/** 用于POJO类
	 * @param fields POJO成员键值对&lt;成员变量,表的列名&gt; 
	 * */
	public void setFields(Map<Field, String> fields) {
		this.fields = fields;
	}
	
	/**用于POJO类，映射表的主键
	 * @return key &lt;实体类成员名,映射的主键名&gt;
	 * */
	public Map<String, String> getKey() {
		return key;
	}
	/**用于POJO类，映射表的主键
	 * @param key &lt;实体类成员名,映射的主键名&gt;
	 * */
	public void setKey(Map<String, String> key) {
		this.key = key;
	}
	
	/**主键是否自增
	 * return keyauto 是否自增
	 * */
	public boolean isKeyAuto() {
		return keyAuto;
	}
	public void setKeyAuto(boolean keyAuto) {
		this.keyAuto = keyAuto;
	}
	
	/**方法的返回类型 是页面还是数据 false为数据，
	 * */
	public Map<String, Boolean> getmReturnType() {
		return mReturnType;
	}
	public void setmReturnType(Map<String, Boolean> mReturnType) {
		this.mReturnType = mReturnType;
	}
	@Override
	public String toString() {
		return "Clazz [clazz=" + clazz + ", name=" + name + ", method=" + method + ", mReturnType=" + mReturnType
				+ ", params=" + params + ", members=" + members + ", fields=" + fields + ", key=" + key + ", keyAuto="
				+ keyAuto + "]";
	}

}
